﻿// Пример перегрузки унарных операторов
// Добавлена перегрузка операторов true и false

using System;

class OverloadUnOperatorsDemo
{
    public static void _Main()
    {
        ThreeDUn t1 = new ThreeDUn(10, 10, 10);
        ThreeDUn t2 = new ThreeDUn(2, 34, -5);
        ThreeDUn t3 = new ThreeDUn();

        
        t1.Show();
        t2.Show();
        
        // Проверка оператора true
        while (t1)
        {
            t1.Show();
            t1--;
        }
            
        t3 = -t1;
        Console.WriteLine("Унарный оператор (-): ");
        t3.Show();

        t3++;
        Console.WriteLine("Унарный оператор (++):");
        t3.Show();


        Console.ReadLine();
    }
}

// Класс трехмерных координат
class ThreeDUn
{
    int x;
    int y;
    int z;

    public ThreeDUn()
    {
        x = y = z = 0;
    }

    public ThreeDUn(int xc, int yc, int zc)
    {
        x = xc;
        y = yc;
        z = zc;
    }

    public void Show()
    {
        Console.WriteLine("X: {0}, Y: {1}, Z: {2}", x, y, z);
    }

    // Перегрузка унарного оператора (-)
    public static ThreeDUn operator -(ThreeDUn t1)
    {
        ThreeDUn t = new ThreeDUn();

        t.x = -t1.x;
        t.y = -t1.y;
        t.z = -t1.z;

        return t;
    }

    // Перегрузка оператора (++)
    public static ThreeDUn operator ++ (ThreeDUn t1)
    {

        t1.x++;
        t1.y++;
        t1.z++;

        return t1;
    }

    // Перегрузка оператора (--)
    public static ThreeDUn operator --(ThreeDUn t1)
    {

        t1.x--;
        t1.y--;
        t1.z--;

        return t1;
    }

    // Перегрузка оператора (True)
    public static bool operator true(ThreeDUn t1)
    {
        if ((t1.x != 0) || (t1.y != 0) || (t1.z != 0))
            return true;
        else return false;
    }

    // Перегрузка оператора (False)
    public static bool operator false(ThreeDUn t1)
    {
        if ((t1.x == 0) && (t1.y == 0) || (t1.z == 0))
            return true;
        else return false;
    }
}